const storageService = require('./storage')


/**
 * 检查任务时间是否与其他任务重叠
 * @param {Array} timerTasks - 任务列表
 * @param {number} taskIndex - 当前任务索引
 * @returns {boolean} 是否有时间重叠
 */
function checkTimeOverlap(timerTasks, taskIndex) {
  const tasks = timerTasks;
  const currentTask = tasks[taskIndex];

  // 当前任务时间
  const currentStartTime = this.timeToMinutes(currentTask.time);
  const currentEndTime = this.timeToMinutes(currentTask.endTime);
  const curArr = []
  if (currentStartTime < currentEndTime) {
    curArr.push({
      tStart: currentStartTime,
      tEnd: currentEndTime
    })
  } else {
    curArr.push({
      tStart: 0,
      tEnd: currentStartTime
    })
    curArr.push({
      tStart: currentEndTime,
      tEnd: 23 * 60 + 59
    })
  }
  // 检查是否有重叠
  for (let i = 0; i < tasks.length; i++) {
    // 跳过当前任务和未启用的任务
    if (i === taskIndex || !tasks[i].enabled) continue;

    const otherStartTime = timeToMinutes(tasks[i].time);
    const otherEndTime = timeToMinutes(tasks[i].endTime);
    let arr = JSON.parse(JSON.stringify(curArr))
    if (otherStartTime < otherEndTime) {
      arr.push({
        tStart: otherStartTime,
        tEnd: otherEndTime
      })
    } else {
      arr.push({
        tStart: 0,
        tEnd: otherStartTime
      })
      arr.push({
        tStart: otherEndTime,
        tEnd: 23 * 60 + 59
      })
    }
    arr.sort((a, b) => a.tStart - b.tStart);
    for (var j = 0; j < arr.length - 1; j++) {
      if (arr[j].tEnd >= arr[j + 1].tStart) {
        return true;
      }
    }
  }
  return false;
}

/**
 * 将时间字符串转换为分钟数
 * @param {string} timeString - 时间字符串，格式为 "HH:MM"
 * @returns {number} 分钟数
 */
function timeToMinutes(timeString) {
  if (!timeString || timeString === '--:--') return 0;
  const [hours, minutes] = timeString.split(':').map(Number);
  return hours * 60 + minutes;
}

/**
 * 检查高阶模式是否有启用的曲
 * @param {string} entityId 
 */
function checkAdvancedEnabled(entityId) {
  const advancedModeData = storageService.getAdvancedModeData(entityId);
  const hasEnabledCurves = advancedModeData && advancedModeData.curves &&
    advancedModeData.curves.some(curve => curve && curve.enabled);
  if (hasEnabledCurves) {
    // 如果有启用的高阶模式曲线，提示用户并禁用行程卡片
    wx.showModal({
      title: '提示',
      content: '已启用高阶模式曲线，无法同时启用行程设置。请先禁用高阶模式曲线后再启用行程。',
      showCancel: false,
    });
  }
  return hasEnabledCurves;
}

module.exports = {
  checkTimeOverlap,
  timeToMinutes,
  checkAdvancedEnabled,
}